Skip to content

Conversation

@gunwoong1630
Copy link
Collaborator

  • ๐Ÿ’ฏ ํ…Œ์ŠคํŠธ๋Š” ์ž˜ ํ†ต๊ณผํ–ˆ๋‚˜์š”?
  • ๐Ÿ—๏ธ ๋นŒ๋“œ๋Š” ์„ฑ๊ณตํ–ˆ๋‚˜์š”?
  • ๐Ÿงน ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋Š” ์ œ๊ฑฐํ–ˆ๋‚˜์š”?
  • ๐Ÿ’ญ ์ด์Šˆ๋Š” ๋“ฑ๋กํ–ˆ๋‚˜์š”?
  • ๐Ÿท๏ธ ๋ผ๋ฒจ์€ ๋“ฑ๋กํ–ˆ๋‚˜์š”?

์ž‘์—… ๋‚ด์šฉ

์Šคํฌ๋ฆฐ์ƒท

์ฃผ์˜์‚ฌํ•ญ

Closes #{์ด์Šˆ ๋ฒˆํ˜ธ}

HwuanPage and others added 30 commits July 15, 2025 09:21
* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€
* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€
* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage
* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage
* feat : MeetingService ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

* feat : ParticipantResponse

* feat : MeetingListResponse ๊ตฌํ˜„

* feat : MeetingDetailResponse๊ตฌํ˜„

* feat : MeetingDetailAndMemberResponse ๊ตฌํ˜„

* feat : ListSpot ๊ตฌํ˜„

* feat : DetailSpot ๊ตฌํ˜„

* feat : CreateMeetingRequest ๊ตฌํ˜„

* feat : Tag ๊ตฌํ˜„

* feat : Long -> long ๋ณ€๊ฒฝ

์„œ๋น„์Šค์™€ Entity๋‚ด์—์„œ null๊ฐ’์ด ์ ˆ๋Œ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฐ’์„ long์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

-> ๋ฌดํ•œํŽ˜์ด์ง€๋กœ๋”ฉํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์—ˆ์Šต๋‹ˆ๋‹ค.

* Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
* feature/FavoritesAndAlertInterface-16-HwuanPage

* Update AlertMapper.java

* Update JellyfishRegionDensityRepository.java

* Update AlertController.java

* Update FavoriteController.java

* Update FavoriteRepository.java

* Update AlertController.java

* Update JellyfishSpieces.java

* Update JellyfishRegion.java

* Update JellyfishRegion.java
* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change
* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •
gunwoong1630 and others added 29 commits July 28, 2025 16:23
* git initialize

* feature/swagger-03-gunwoong (#5)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/OpenAPI Test/02-HwuanPage

* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage

* feat: entity, repositor ๊ตฌํ˜„

* feat: ์˜ˆ์ƒ dto ๊ตฌํ˜„

* chore: ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ์ธ ๊ตฌํ˜„ & ์ดํ›„ ํ† ํฐ ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* fix: AuthCotnroller ์ˆ˜์ •

* fix: ํด๋ผ์ด์–ธํŠธ์—์„œ ์นด์นด์˜ค์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„ ์„œ๋ฒ„๋กœ post ํ•˜๊ฒŒ ์ˆ˜์ •

* feat: ํ† ํฐ ๊ฒ€์ฆ

* feat: refresh token ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง ๊ตฌํ˜„

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ & ์žฌ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* feat: SecurityFilterChain ์—”๋“œ ํฌ์ธํŠธ ํ—ˆ์šฉ

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„

* feat: redis์—์„œ refreshToken ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ

* refactor: controller์— ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ ๋˜์–ด ์žˆ๋˜ ๋กœ์ง๋“ค ๋ถ„๋ฆฌ

* test: member ๊ด€๋ จ ํ…Œ์ŠคํŠธ

* chore: ํ•˜๋“œ์ฝ”๋”ฉํ•œ ์ค‘์š” ๊ฐ’ Intellij IDEA ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •

* refactor: state ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ธ์…˜ ์ถ”๊ฐ€

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* format: naver formatter๋กœ ํฌ๋งคํŒ…

* chore: application-dev

* fix: customException ์ฒ˜๋ฆฌ

* Feat/meeting interface (#19)

* feat : MeetingService ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

* feat : ParticipantResponse

* feat : MeetingListResponse ๊ตฌํ˜„

* feat : MeetingDetailResponse๊ตฌํ˜„

* feat : MeetingDetailAndMemberResponse ๊ตฌํ˜„

* feat : ListSpot ๊ตฌํ˜„

* feat : DetailSpot ๊ตฌํ˜„

* feat : CreateMeetingRequest ๊ตฌํ˜„

* feat : Tag ๊ตฌํ˜„

* feat : Long -> long ๋ณ€๊ฒฝ

์„œ๋น„์Šค์™€ Entity๋‚ด์—์„œ null๊ฐ’์ด ์ ˆ๋Œ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฐ’์„ long์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

-> ๋ฌดํ•œํŽ˜์ด์ง€๋กœ๋”ฉํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์—ˆ์Šต๋‹ˆ๋‹ค.

* Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java



---------



* Feature/FavoritesAndAlertInterface-16-HwuanPage

* feature/FavoritesAndAlertInterface-16-HwuanPage

* Update AlertMapper.java

* Update JellyfishRegionDensityRepository.java

* Update AlertController.java

* Update FavoriteController.java

* Update FavoriteRepository.java

* Update AlertController.java

* Update JellyfishSpieces.java

* Update JellyfishRegion.java

* Update JellyfishRegion.java

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feat: spot service (#34)

* feat: spot service

* feat: spot service ๊ณ ๋„ํ™” ๋ฐ ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* hotfix: duplicated controller method

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* Feature/spot preview 40 gunwoong (#41)

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* hotfix: jpa metamodel fix

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* Feature/Alert-22-HwuanPage

* Create Pdf Parser

* Web crawler run perpectly,but pdfparser do not work well

* PDF parse to stack DB complete with OPENAI

* CallAlert Complete

* JellyFish PDF parsing work well

* feature/ControllerTest Complete

* feature/JellyfishAlert-26-HwuanPage

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#49)

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

* refactor: ๋ฆฌํŒฉํ† ๋ง

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* Feature/integration init (#54)

* feature/IntegrationSet(test&Build)-52-HwuanPage

* data.sql unique update

* image build needs

* ignore dev.yml

* remove dev.yml tracking and ignore it

* prod

* proded

* Feature/activities 17 audwls239 (#56)

* feature: ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค ์ƒ์„ฑ

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์กฐํšŒ(์œ„์น˜ ๊ธฐ๋ฐ˜)

* feature: DTO ์ถ”๊ฐ€

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์กฐํšŒ(๊ธ€๋กœ๋ฒŒ) ์ถ”๊ฐ€, ์ปจํŠธ๋กค๋Ÿฌ ์ˆ˜์ •

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์ƒ์„ธ ์กฐํšŒ(๋ฏธ์™„์„ฑ)

* feature: ํ•ด์–‘ ์ •๋ณด ์กฐํšŒ

* feature: ํ™œ๋™ ์ƒ์„ธ ์กฐํšŒ

---------



* feat : ParticipantError ์ž…๋‹ˆ๋‹ค.

* hotfix: error fix

* fix : Directory ์ˆ˜์ •์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. (#57)

* hotfix: error fix

* feat: member delete (#58)

* fix: ๋ฉค๋ฒ„ ์‚ญ์ œ ๊ตฌํ˜„

* feat: ๋ฉค๋ฒ„ ์‚ญ์ œ, ์œ„/๊ฒฝ๋„ ์ˆ˜์ • ๊ตฌํ˜„

* test: ํ…Œ์ŠคํŠธ ์ˆ˜์ •

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/MemberRepository.java

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/OutdoorSpotSpotRepository.java

* Delete src/main/resources/test.http

---------




* fix : ParticipantRepository (#59)

existsByMeetingIdAndUserId ๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix : ParticipantRepository (#60)

memberId -> userId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix: token (#61)

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

# Conflicts:
#	src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java
#	src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* feat: ํ…Œ์ŠคํŠธ์šฉ ์•ก์„ธ์Šค ํ† ํฐ ์ƒ์„ฑ

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

# Conflicts:
#	src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java
#	src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* fix : jellyfish ๋ถ€๋ถ„

* fix: activity ๋ถ€๋ถ„

* fix: member ๋ถ€๋ถ„

* fix: member ๋ถ€๋ถ„

* fix: spot ๋ถ€๋ถ„

* fix: forecast ๋ถ€๋ถ„

* fix: favorite ๋ถ€๋ถ„

* fix: alert ๋ถ€๋ถ„

* fix: meeting ๋ถ€๋ถ„

---------







* hotfix/fix-alert&favorites-62-HwuanPage

* fix(hotfix/Meeting) : rebase๋กœ ์ธํ•œ ์ฝ”๋“œ ๋ˆ„๋ฝ ์ˆ˜์ • (#65)

* hotfix: ์ฝ”๋“œ ๋ˆ„๋ฝ ํ•ด๊ฒฐ (#67)

* Fix/fix 70 gunwoong (#71)

* hotfix: fix

* hotfix: fix

* hotfix: fix

* fix: application-prod.yml์—์„œ ์ฟ ํ‚ค๋ฅผ ์“ธ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ • (#69)

* fix: application-prod.yml์—์„œ ์ฟ ํ‚ค๋ฅผ ์“ธ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ •

* test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

* fix: activities ์‹œํ๋ฆฌํ‹ฐ ์—”๋“œํฌ์ธํŠธ ํ—ˆ์šฉ. redirecturi ์ˆ˜์ •

* Chore/docker set andvariable-68-hwuanPage

* chore/ReadytoDeployv1.0.0-68-HuwanPage

* chore/ReadytoDeploymentv1.0.0-68-HuwanPage

* remove etc

* prod

* refactor: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค. (#74)

* Feat/meeting test 75 (#77)

* feat : Meetingtest ๋ฅผ ์œ„ํ•œ Util ํŒŒ์ผ์ž…๋‹ˆ๋‹ˆ๋‹ค.

* feat : Meetingtest ๋ฅผ ์œ„ํ•œ Util ํŒŒ์ผ์ž…๋‹ˆ๋‹ˆ๋‹ค.

* feat : MeetingServiceImplTest ๋‹จ์œ„ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

* feat : MeetingControllerTest ํ†ตํ•ฉํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

* feat : Build Lombok์„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ˆ˜์ •์ž…๋‹ˆ๋‹ค.

* feat : Tag ์—”ํ‹ฐํ‹ฐ

Tag List<String> content ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl

* feat : MeetingServiceImpl์—์„œ ์ˆ˜์ •ํ•˜๋Š” ์‘๋‹ต์„ ์ˆ˜์ • , ๋งคํผ๋ฅผ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : Meeting์—์„œ ํ•„์š”ํ•œ url์„ ์—ด์–ด๋’€์Šต๋‹ˆ๋‹ค.

* space prob solve

* stack-trace-DEBUG

* hotfix/data.sql deprecate-HwuanPage (#79)

* hotfix/data.sql deprecate-HwuanPage

* portnum fix

* Xtest

* test X

* workflow fix

* add id

* fix docker-compose-image-root

* release/v1-marineleisure

* fix: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค. (#83)

* fix: cors ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฐํฌ ๋„๋ฉ”์ธ ์ถ”๊ฐ€ (#84)

* fix: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค.

* fix: cors ํ”„๋กœํŠธ์—”๋“œ ๋„๋ฉ”์ธ ์ถ”๊ฐ€

* hotfix/method_allowed_patch-HwuanPage (#86)

* Refactor/exception hwuan page (#87)

* refacotr/favorite-Exception-update

* fix kakao_redirect_uri

* Feature/map service refactoring 76 gunwoong (#85)

* feat: mapServiceRefactoring

* refactoring: spot detail refactoring

* refactoring: GeoUtils refactoring

* test: repository test disable for prod

* fix: apply flyway to yml

* fix: disable test

* refactor: khoa refactoring

* fix: bug

* fix: sql

* fix: yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€

* fix: detail field name ์ˆ˜์ •

* feature: ์Šค์ผ€์ค„๋ง ๋น„๋™๊ธฐ ๊ตฌํ˜„ (#91)

* refactor: cacheable (#103)

* Fix/meeting urland role (#100)

* fix : MeetingServiceImpl
getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง€ host ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€

* fix : MeetingRepository

getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง€ host ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€

* fix : MeetingError

MEETING_MEMBER_NOT_FOUND ์—๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ฏธํŒ…์—์„œ ๋งด๋ฒ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค.

* fix : MeetingController

MeetingController ์—์„œ role ์„ ํ™•์ธํ•˜์—ฌ ์ถ”๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

URL ๊ฐœ์„ ์— ์˜ํ•œ ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

@disabled ์ถ”๊ฐ€ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat: ํšŒ์› ํƒˆํ‡ด ์‹œ ์นด์นด์˜ค ์—ฐ๊ฒฐ ๋Š๊ธฐ๋„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•œ๋‹ค. (#98)

* feat: member ์‚ญ์ œ ์‹œ kakao ์—ฐ๊ฒฐ ๋Š๊ธฐ ๋กœ์ง๋„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๊ตฌํ˜„

* test: ๋ณ€๊ฒฝ ์‚ฌํ•ญ test

* feat : Meeting์˜ ์ปค์„œ๋ฐฉ์‹์—์„œ ๋งคํ•‘์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. (#94)

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ณผ์ •์—์„œ pkce๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ ๊ด€์ ์—์„œ ๊ฐœ์„  (#106)

* feat: ๋ณด์•ˆ ์ธ์ฆ ๊ณผ์ •์—์„œ PKCE ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌํ˜„

* test: ๋ณ€๊ฒฝ ์‚ฌํ•ญ test ์ถ”๊ฐ€

* feat: PKCE ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ ์ฝ”๋“œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ

* test: PKCE ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ test

* refactor: PKCE ์ƒ์„ฑ์„ ํด๋ผ์ด์–ธํŠธ ์—๊ฒŒ ๋„˜๊ธด๋‹ค.

* test: pkce test ํ”Œ๋กœ์šฐ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ

* fix: member entity์˜ nickname ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค

* fix: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด SchedulerService.java ์˜ @RequiredArgsConstrucor ์ง€์šด ๋ถ€๋ถ„ ๋ณต๊ตฌ

* fix: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด SchedulerService.java ์˜ @RequiredArgsConstrucor ์ง€์šด ๋ถ€๋ถ„ ๋ณต๊ตฌ

* refactor: open-meteo ์„œ๋น„์Šค ๊ด€๋ จ ๋ฆฌํŒฉํ† ๋ง (#95)

* refactor: RichDomain์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค. (#105)

* Fix: login redirect (#107)

* fix: ๋กœ๊ทธ์ธ ์š”์ฒญ๋•Œ์˜ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri๋ฅผ ํ† ํฐ ๊ตํ™˜์‹œ์—๋„ ์‚ฌ์šฉ

* test: test

* fix: fallback ์ƒํ™ฉ์—์„œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri ์ฐพ๋Š” ๋กœ์ง ์ถ”๊ฐ€

* Refactor/meeting rich domain (#110)

* refactor: RichDomain์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค.

* refactor: ๋ˆ„๋ฝ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ด ์žˆ์–ด ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

* build: caffenine ์ ์šฉ

* relase (#111) (#112)

* git initialize

* feature/swagger-03-gunwoong (#5)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/OpenAPI Test/02-HwuanPage

* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage

* feat: entity, repositor ๊ตฌํ˜„

* feat: ์˜ˆ์ƒ dto ๊ตฌํ˜„

* chore: ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ์ธ ๊ตฌํ˜„ & ์ดํ›„ ํ† ํฐ ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* fix: AuthCotnroller ์ˆ˜์ •

* fix: ํด๋ผ์ด์–ธํŠธ์—์„œ ์นด์นด์˜ค์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„ ์„œ๋ฒ„๋กœ post ํ•˜๊ฒŒ ์ˆ˜์ •

* feat: ํ† ํฐ ๊ฒ€์ฆ

* feat: refresh token ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง ๊ตฌํ˜„

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ & ์žฌ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* feat: SecurityFilterChain ์—”๋“œ ํฌ์ธํŠธ ํ—ˆ์šฉ

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„

* feat: redis์—์„œ refreshToken ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ

* refactor: controller์— ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ ๋˜์–ด ์žˆ๋˜ ๋กœ์ง๋“ค ๋ถ„๋ฆฌ

* test: member ๊ด€๋ จ ํ…Œ์ŠคํŠธ

* chore: ํ•˜๋“œ์ฝ”๋”ฉํ•œ ์ค‘์š” ๊ฐ’ Intellij IDEA ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •

* refactor: state ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ธ์…˜ ์ถ”๊ฐ€

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* format: naver formatter๋กœ ํฌ๋งคํŒ…

* chore: application-dev

* fix: customException ์ฒ˜๋ฆฌ

* Feat/meeting interface (#19)

* feat : MeetingService ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

* feat : ParticipantResponse

* feat : MeetingListResponse ๊ตฌํ˜„

* feat : MeetingDetailResponse๊ตฌํ˜„

* feat : MeetingDetailAndMemberResponse ๊ตฌํ˜„

* feat : ListSpot ๊ตฌํ˜„

* feat : DetailSpot ๊ตฌํ˜„

* feat : CreateMeetingRequest ๊ตฌํ˜„

* feat : Tag ๊ตฌํ˜„

* feat : Long -> long ๋ณ€๊ฒฝ

์„œ๋น„์Šค์™€ Entity๋‚ด์—์„œ null๊ฐ’์ด ์ ˆ๋Œ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฐ’์„ long์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

-> ๋ฌดํ•œํŽ˜์ด์ง€๋กœ๋”ฉํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์—ˆ์Šต๋‹ˆ๋‹ค.

* Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java



---------



* Feature/FavoritesAndAlertInterface-16-HwuanPage

* feature/FavoritesAndAlertInterface-16-HwuanPage

* Update AlertMapper.java

* Update JellyfishRegionDensityRepository.java

* Update AlertController.java

* Update FavoriteController.java

* Update FavoriteRepository.java

* Update AlertController.java

* Update JellyfishSpieces.java

* Update JellyfishRegion.java

* Update JellyfishRegion.java

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feat: spot service (#34)

* feat: spot service

* feat: spot service ๊ณ ๋„ํ™” ๋ฐ ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* hotfix: duplicated controller method

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* Feature/spot preview 40 gunwoong (#41)

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* hotfix: jpa metamodel fix

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* Feature/Alert-22-HwuanPage

* Create Pdf Parser

* Web crawler run perpectly,but pdfparser do not work well

* PDF parse to stack DB complete with OPENAI

* CallAlert Complete

* JellyFish PDF parsing work well

* feature/ControllerTest Complete

* feature/JellyfishAlert-26-HwuanPage

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#49)

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

* refactor: ๋ฆฌํŒฉํ† ๋ง

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* Feature/integration init (#54)

* feature/IntegrationSet(test&Build)-52-HwuanPage

* data.sql unique update

* image build needs

* ignore dev.yml

* remove dev.yml tracking and ignore it

* prod

* proded

* Feature/activities 17 audwls239 (#56)

* feature: ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค ์ƒ์„ฑ

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์กฐํšŒ(์œ„์น˜ ๊ธฐ๋ฐ˜)

* feature: DTO ์ถ”๊ฐ€

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์กฐํšŒ(๊ธ€๋กœ๋ฒŒ) ์ถ”๊ฐ€, ์ปจํŠธ๋กค๋Ÿฌ ์ˆ˜์ •

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์ƒ์„ธ ์กฐํšŒ(๋ฏธ์™„์„ฑ)

* feature: ํ•ด์–‘ ์ •๋ณด ์กฐํšŒ

* feature: ํ™œ๋™ ์ƒ์„ธ ์กฐํšŒ

---------



* feat : ParticipantError ์ž…๋‹ˆ๋‹ค.

* hotfix: error fix

* fix : Directory ์ˆ˜์ •์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. (#57)

* hotfix: error fix

* feat: member delete (#58)

* fix: ๋ฉค๋ฒ„ ์‚ญ์ œ ๊ตฌํ˜„

* feat: ๋ฉค๋ฒ„ ์‚ญ์ œ, ์œ„/๊ฒฝ๋„ ์ˆ˜์ • ๊ตฌํ˜„

* test: ํ…Œ์ŠคํŠธ ์ˆ˜์ •

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/MemberRepository.java

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/OutdoorSpotSpotRepository.java

* Delete src/main/resources/test.http

---------




* fix : ParticipantRepository (#59)

existsByMeetingIdAndUserId ๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix : ParticipantRepository (#60)

memberId -> userId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix: token (#61)

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

# Conflicts:
#	src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java
#	src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* feat: ํ…Œ์ŠคํŠธ์šฉ ์•ก์„ธ์Šค ํ† ํฐ ์ƒ์„ฑ

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

# Conflicts:
#	src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java
#	src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* fix : jellyfish ๋ถ€๋ถ„

* fix: activity ๋ถ€๋ถ„

* fix: member ๋ถ€๋ถ„

* fix: member ๋ถ€๋ถ„

* fix: spot ๋ถ€๋ถ„

* fix: forecast ๋ถ€๋ถ„

* fix: favorite ๋ถ€๋ถ„

* fix: alert ๋ถ€๋ถ„

* fix: meeting ๋ถ€๋ถ„

---------







* hotfix/fix-alert&favorites-62-HwuanPage

* fix(hotfix/Meeting) : rebase๋กœ ์ธํ•œ ์ฝ”๋“œ ๋ˆ„๋ฝ ์ˆ˜์ • (#65)

* hotfix: ์ฝ”๋“œ ๋ˆ„๋ฝ ํ•ด๊ฒฐ (#67)

* Fix/fix 70 gunwoong (#71)

* hotfix: fix

* hotfix: fix

* hotfix: fix

* fix: application-prod.yml์—์„œ ์ฟ ํ‚ค๋ฅผ ์“ธ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ • (#69)

* fix: application-prod.yml์—์„œ ์ฟ ํ‚ค๋ฅผ ์“ธ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ •

* test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

* fix: activities ์‹œํ๋ฆฌํ‹ฐ ์—”๋“œํฌ์ธํŠธ ํ—ˆ์šฉ. redirecturi ์ˆ˜์ •

* Chore/docker set andvariable-68-hwuanPage

* chore/ReadytoDeployv1.0.0-68-HuwanPage

* chore/ReadytoDeploymentv1.0.0-68-HuwanPage

* remove etc

* prod

* refactor: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค. (#74)

* Feat/meeting test 75 (#77)

* feat : Meetingtest ๋ฅผ ์œ„ํ•œ Util ํŒŒ์ผ์ž…๋‹ˆ๋‹ˆ๋‹ค.

* feat : Meetingtest ๋ฅผ ์œ„ํ•œ Util ํŒŒ์ผ์ž…๋‹ˆ๋‹ˆ๋‹ค.

* feat : MeetingServiceImplTest ๋‹จ์œ„ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

* feat : MeetingControllerTest ํ†ตํ•ฉํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

* feat : Build Lombok์„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ˆ˜์ •์ž…๋‹ˆ๋‹ค.

* feat : Tag ์—”ํ‹ฐํ‹ฐ

Tag List<String> content ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl

* feat : MeetingServiceImpl์—์„œ ์ˆ˜์ •ํ•˜๋Š” ์‘๋‹ต์„ ์ˆ˜์ • , ๋งคํผ๋ฅผ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : Meeting์—์„œ ํ•„์š”ํ•œ url์„ ์—ด์–ด๋’€์Šต๋‹ˆ๋‹ค.

* space prob solve

* stack-trace-DEBUG

* hotfix/data.sql deprecate-HwuanPage (#79)

* hotfix/data.sql deprecate-HwuanPage

* portnum fix

* Xtest

* test X

* workflow fix

* add id

* fix docker-compose-image-root

* release/v1-marineleisure

* fix: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค. (#83)

* fix: cors ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฐํฌ ๋„๋ฉ”์ธ ์ถ”๊ฐ€ (#84)

* fix: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค.

* fix: cors ํ”„๋กœํŠธ์—”๋“œ ๋„๋ฉ”์ธ ์ถ”๊ฐ€

* hotfix/method_allowed_patch-HwuanPage (#86)

* Refactor/exception hwuan page (#87)

* refacotr/favorite-Exception-update

* fix kakao_redirect_uri

* Feature/map service refactoring 76 gunwoong (#85)

* feat: mapServiceRefactoring

* refactoring: spot detail refactoring

* refactoring: GeoUtils refactoring

* test: repository test disable for prod

* fix: apply flyway to yml

* fix: disable test

* refactor: khoa refactoring

* fix: bug

* fix: sql

* fix: yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€

* fix: detail field name ์ˆ˜์ •

* feature: ์Šค์ผ€์ค„๋ง ๋น„๋™๊ธฐ ๊ตฌํ˜„ (#91)

* refactor: cacheable (#103)

* Fix/meeting urland role (#100)

* fix : MeetingServiceImpl
getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง€ host ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€

* fix : MeetingRepository

getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง€ host ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€

* fix : MeetingError

MEETING_MEMBER_NOT_FOUND ์—๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ฏธํŒ…์—์„œ ๋งด๋ฒ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค.

* fix : MeetingController

MeetingController ์—์„œ role ์„ ํ™•์ธํ•˜์—ฌ ์ถ”๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

URL ๊ฐœ์„ ์— ์˜ํ•œ ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

@disabled ์ถ”๊ฐ€ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat: ํšŒ์› ํƒˆํ‡ด ์‹œ ์นด์นด์˜ค ์—ฐ๊ฒฐ ๋Š๊ธฐ๋„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•œ๋‹ค. (#98)

* feat: member ์‚ญ์ œ ์‹œ kakao ์—ฐ๊ฒฐ ๋Š๊ธฐ ๋กœ์ง๋„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๊ตฌํ˜„

* test: ๋ณ€๊ฒฝ ์‚ฌํ•ญ test

* feat : Meeting์˜ ์ปค์„œ๋ฐฉ์‹์—์„œ ๋งคํ•‘์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. (#94)

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ณผ์ •์—์„œ pkce๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ ๊ด€์ ์—์„œ ๊ฐœ์„  (#106)

* feat: ๋ณด์•ˆ ์ธ์ฆ ๊ณผ์ •์—์„œ PKCE ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌํ˜„

* test: ๋ณ€๊ฒฝ ์‚ฌํ•ญ test ์ถ”๊ฐ€

* feat: PKCE ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ ์ฝ”๋“œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ

* test: PKCE ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ test

* refactor: PKCE ์ƒ์„ฑ์„ ํด๋ผ์ด์–ธํŠธ ์—๊ฒŒ ๋„˜๊ธด๋‹ค.

* test: pkce test ํ”Œ๋กœ์šฐ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ

* fix: member entity์˜ nickname ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค

* fix: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด SchedulerService.java ์˜ @RequiredArgsConstrucor ์ง€์šด ๋ถ€๋ถ„ ๋ณต๊ตฌ

* fix: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด SchedulerService.java ์˜ @RequiredArgsConstrucor ์ง€์šด ๋ถ€๋ถ„ ๋ณต๊ตฌ

* refactor: open-meteo ์„œ๋น„์Šค ๊ด€๋ จ ๋ฆฌํŒฉํ† ๋ง (#95)

* refactor: RichDomain์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค. (#105)

* Fix: login redirect (#107)

* fix: ๋กœ๊ทธ์ธ ์š”์ฒญ๋•Œ์˜ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri๋ฅผ ํ† ํฐ ๊ตํ™˜์‹œ์—๋„ ์‚ฌ์šฉ

* test: test

* fix: fallback ์ƒํ™ฉ์—์„œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri ์ฐพ๋Š” ๋กœ์ง ์ถ”๊ฐ€

* Refactor/meeting rich domain (#110)

* refactor: RichDomain์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค.

* refactor: ๋ˆ„๋ฝ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ด ์žˆ์–ด ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

* build: caffenine ์ ์šฉ

---------








* fix: fallback ์ƒํ™ฉ์—์„œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri ์ฐพ๋Š” ๋กœ์ง ์ถ”๊ฐ€ (#113)

* release (#114) (#115)

* git initialize

* feature/swagger-03-gunwoong (#5)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/OpenAPI Test/02-HwuanPage

* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage

* feat: entity, repositor ๊ตฌํ˜„

* feat: ์˜ˆ์ƒ dto ๊ตฌํ˜„

* chore: ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ์ธ ๊ตฌํ˜„ & ์ดํ›„ ํ† ํฐ ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* fix: AuthCotnroller ์ˆ˜์ •

* fix: ํด๋ผ์ด์–ธํŠธ์—์„œ ์นด์นด์˜ค์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„ ์„œ๋ฒ„๋กœ post ํ•˜๊ฒŒ ์ˆ˜์ •

* feat: ํ† ํฐ ๊ฒ€์ฆ

* feat: refresh token ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง ๊ตฌํ˜„

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ & ์žฌ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* feat: SecurityFilterChain ์—”๋“œ ํฌ์ธํŠธ ํ—ˆ์šฉ

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„

* feat: redis์—์„œ refreshToken ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ

* refactor: controller์— ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ ๋˜์–ด ์žˆ๋˜ ๋กœ์ง๋“ค ๋ถ„๋ฆฌ

* test: member ๊ด€๋ จ ํ…Œ์ŠคํŠธ

* chore: ํ•˜๋“œ์ฝ”๋”ฉํ•œ ์ค‘์š” ๊ฐ’ Intellij IDEA ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •

* refactor: state ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ธ์…˜ ์ถ”๊ฐ€

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* format: naver formatter๋กœ ํฌ๋งคํŒ…

* chore: application-dev

* fix: customException ์ฒ˜๋ฆฌ

* Feat/meeting interface (#19)

* feat : MeetingService ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

* feat : ParticipantResponse

* feat : MeetingListResponse ๊ตฌํ˜„

* feat : MeetingDetailResponse๊ตฌํ˜„

* feat : MeetingDetailAndMemberResponse ๊ตฌํ˜„

* feat : ListSpot ๊ตฌํ˜„

* feat : DetailSpot ๊ตฌํ˜„

* feat : CreateMeetingRequest ๊ตฌํ˜„

* feat : Tag ๊ตฌํ˜„

* feat : Long -> long ๋ณ€๊ฒฝ

์„œ๋น„์Šค์™€ Entity๋‚ด์—์„œ null๊ฐ’์ด ์ ˆ๋Œ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฐ’์„ long์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

-> ๋ฌดํ•œํŽ˜์ด์ง€๋กœ๋”ฉํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์—ˆ์Šต๋‹ˆ๋‹ค.

* Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java



---------



* Feature/FavoritesAndAlertInterface-16-HwuanPage

* feature/FavoritesAndAlertInterface-16-HwuanPage

* Update AlertMapper.java

* Update JellyfishRegionDensityRepository.java

* Update AlertController.java

* Update FavoriteController.java

* Update FavoriteRepository.java

* Update AlertController.java

* Update JellyfishSpieces.java

* Update JellyfishRegion.java

* Update JellyfishRegion.java

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feat: spot service (#34)

* feat: spot service

* feat: spot service ๊ณ ๋„ํ™” ๋ฐ ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* hotfix: duplicated controller method

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* Feature/spot preview 40 gunwoong (#41)

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* hotfix: jpa metamodel fix

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* Feature/Alert-22-HwuanPage

* Create Pdf Parser

* Web crawler run perpectly,but pdfparser do not work well

* PDF parse to stack DB complete with OPENAI

* CallAlert Complete

* JellyFish PDF parsing work well

* feature/ControllerTest Complete

* feature/JellyfishAlert-26-HwuanPage

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#49)

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

* refactor: ๋ฆฌํŒฉํ† ๋ง

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ โ€ฆ

Co-authored-by: HwuanPage <[email protected]>
Co-authored-by: JaeoneHeo <[email protected]>
Co-authored-by: LEESUNBIN <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: MyungJin <[email protected]>
Co-authored-by: iseonbin <[email protected]>
Co-authored-by: MyungJin <[email protected]>
* hotfix: weather

* hotfix: activity index
* git initialize

* feature/swagger-03-gunwoong (#5)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/OpenAPI Test/02-HwuanPage

* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage

* feat: entity, repositor ๊ตฌํ˜„

* feat: ์˜ˆ์ƒ dto ๊ตฌํ˜„

* chore: ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ์ธ ๊ตฌํ˜„ & ์ดํ›„ ํ† ํฐ ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* fix: AuthCotnroller ์ˆ˜์ •

* fix: ํด๋ผ์ด์–ธํŠธ์—์„œ ์นด์นด์˜ค์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„ ์„œ๋ฒ„๋กœ post ํ•˜๊ฒŒ ์ˆ˜์ •

* feat: ํ† ํฐ ๊ฒ€์ฆ

* feat: refresh token ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง ๊ตฌํ˜„

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ & ์žฌ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* feat: SecurityFilterChain ์—”๋“œ ํฌ์ธํŠธ ํ—ˆ์šฉ

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„

* feat: redis์—์„œ refreshToken ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ

* refactor: controller์— ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ ๋˜์–ด ์žˆ๋˜ ๋กœ์ง๋“ค ๋ถ„๋ฆฌ

* test: member ๊ด€๋ จ ํ…Œ์ŠคํŠธ

* chore: ํ•˜๋“œ์ฝ”๋”ฉํ•œ ์ค‘์š” ๊ฐ’ Intellij IDEA ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •

* refactor: state ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ธ์…˜ ์ถ”๊ฐ€

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* format: naver formatter๋กœ ํฌ๋งคํŒ…

* chore: application-dev

* fix: customException ์ฒ˜๋ฆฌ

* Feat/meeting interface (#19)

* feat : MeetingService ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

* feat : ParticipantResponse

* feat : MeetingListResponse ๊ตฌํ˜„

* feat : MeetingDetailResponse๊ตฌํ˜„

* feat : MeetingDetailAndMemberResponse ๊ตฌํ˜„

* feat : ListSpot ๊ตฌํ˜„

* feat : DetailSpot ๊ตฌํ˜„

* feat : CreateMeetingRequest ๊ตฌํ˜„

* feat : Tag ๊ตฌํ˜„

* feat : Long -> long ๋ณ€๊ฒฝ

์„œ๋น„์Šค์™€ Entity๋‚ด์—์„œ null๊ฐ’์ด ์ ˆ๋Œ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฐ’์„ long์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

-> ๋ฌดํ•œํŽ˜์ด์ง€๋กœ๋”ฉํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์—ˆ์Šต๋‹ˆ๋‹ค.

* Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java



---------



* Feature/FavoritesAndAlertInterface-16-HwuanPage

* feature/FavoritesAndAlertInterface-16-HwuanPage

* Update AlertMapper.java

* Update JellyfishRegionDensityRepository.java

* Update AlertController.java

* Update FavoriteController.java

* Update FavoriteRepository.java

* Update AlertController.java

* Update JellyfishSpieces.java

* Update JellyfishRegion.java

* Update JellyfishRegion.java

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feat: spot service (#34)

* feat: spot service

* feat: spot service ๊ณ ๋„ํ™” ๋ฐ ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* hotfix: duplicated controller method

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* Feature/spot preview 40 gunwoong (#41)

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* hotfix: jpa metamodel fix

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* Feature/Alert-22-HwuanPage

* Create Pdf Parser

* Web crawler run perpectly,but pdfparser do not work well

* PDF parse to stack DB complete with OPENAI

* CallAlert Complete

* JellyFish PDF parsing work well

* feature/ControllerTest Complete

* feature/JellyfishAlert-26-HwuanPage

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#49)

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

* refactor: ๋ฆฌํŒฉํ† ๋ง

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* Feature/integration init (#54)

* feature/IntegrationSet(test&Build)-52-HwuanPage

* data.sql unique update

* image build needs

* ignore dev.yml

* remove dev.yml tracking and ignore it

* prod

* proded

* Feature/activities 17 audwls239 (#56)

* feature: ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค ์ƒ์„ฑ

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์กฐํšŒ(์œ„์น˜ ๊ธฐ๋ฐ˜)

* feature: DTO ์ถ”๊ฐ€

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์กฐํšŒ(๊ธ€๋กœ๋ฒŒ) ์ถ”๊ฐ€, ์ปจํŠธ๋กค๋Ÿฌ ์ˆ˜์ •

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์ƒ์„ธ ์กฐํšŒ(๋ฏธ์™„์„ฑ)

* feature: ํ•ด์–‘ ์ •๋ณด ์กฐํšŒ

* feature: ํ™œ๋™ ์ƒ์„ธ ์กฐํšŒ

---------



* feat : ParticipantError ์ž…๋‹ˆ๋‹ค.

* hotfix: error fix

* fix : Directory ์ˆ˜์ •์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. (#57)

* hotfix: error fix

* feat: member delete (#58)

* fix: ๋ฉค๋ฒ„ ์‚ญ์ œ ๊ตฌํ˜„

* feat: ๋ฉค๋ฒ„ ์‚ญ์ œ, ์œ„/๊ฒฝ๋„ ์ˆ˜์ • ๊ตฌํ˜„

* test: ํ…Œ์ŠคํŠธ ์ˆ˜์ •

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/MemberRepository.java

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/OutdoorSpotSpotRepository.java

* Delete src/main/resources/test.http

---------




* fix : ParticipantRepository (#59)

existsByMeetingIdAndUserId ๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix : ParticipantRepository (#60)

memberId -> userId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix: token (#61)

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

# Conflicts:
#	src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java
#	src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* feat: ํ…Œ์ŠคํŠธ์šฉ ์•ก์„ธ์Šค ํ† ํฐ ์ƒ์„ฑ

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

# Conflicts:
#	src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java
#	src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* fix : jellyfish ๋ถ€๋ถ„

* fix: activity ๋ถ€๋ถ„

* fix: member ๋ถ€๋ถ„

* fix: member ๋ถ€๋ถ„

* fix: spot ๋ถ€๋ถ„

* fix: forecast ๋ถ€๋ถ„

* fix: favorite ๋ถ€๋ถ„

* fix: alert ๋ถ€๋ถ„

* fix: meeting ๋ถ€๋ถ„

---------







* hotfix/fix-alert&favorites-62-HwuanPage

* fix(hotfix/Meeting) : rebase๋กœ ์ธํ•œ ์ฝ”๋“œ ๋ˆ„๋ฝ ์ˆ˜์ • (#65)

* hotfix: ์ฝ”๋“œ ๋ˆ„๋ฝ ํ•ด๊ฒฐ (#67)

* Fix/fix 70 gunwoong (#71)

* hotfix: fix

* hotfix: fix

* hotfix: fix

* fix: application-prod.yml์—์„œ ์ฟ ํ‚ค๋ฅผ ์“ธ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ • (#69)

* fix: application-prod.yml์—์„œ ์ฟ ํ‚ค๋ฅผ ์“ธ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ •

* test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

* fix: activities ์‹œํ๋ฆฌํ‹ฐ ์—”๋“œํฌ์ธํŠธ ํ—ˆ์šฉ. redirecturi ์ˆ˜์ •

* Chore/docker set andvariable-68-hwuanPage

* chore/ReadytoDeployv1.0.0-68-HuwanPage

* chore/ReadytoDeploymentv1.0.0-68-HuwanPage

* remove etc

* prod

* refactor: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค. (#74)

* Feat/meeting test 75 (#77)

* feat : Meetingtest ๋ฅผ ์œ„ํ•œ Util ํŒŒ์ผ์ž…๋‹ˆ๋‹ˆ๋‹ค.

* feat : Meetingtest ๋ฅผ ์œ„ํ•œ Util ํŒŒ์ผ์ž…๋‹ˆ๋‹ˆ๋‹ค.

* feat : MeetingServiceImplTest ๋‹จ์œ„ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

* feat : MeetingControllerTest ํ†ตํ•ฉํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

* feat : Build Lombok์„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ˆ˜์ •์ž…๋‹ˆ๋‹ค.

* feat : Tag ์—”ํ‹ฐํ‹ฐ

Tag List<String> content ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl

* feat : MeetingServiceImpl์—์„œ ์ˆ˜์ •ํ•˜๋Š” ์‘๋‹ต์„ ์ˆ˜์ • , ๋งคํผ๋ฅผ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : Meeting์—์„œ ํ•„์š”ํ•œ url์„ ์—ด์–ด๋’€์Šต๋‹ˆ๋‹ค.

* space prob solve

* stack-trace-DEBUG

* hotfix/data.sql deprecate-HwuanPage (#79)

* hotfix/data.sql deprecate-HwuanPage

* portnum fix

* Xtest

* test X

* workflow fix

* add id

* fix docker-compose-image-root

* release/v1-marineleisure

* fix: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค. (#83)

* fix: cors ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฐํฌ ๋„๋ฉ”์ธ ์ถ”๊ฐ€ (#84)

* fix: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค.

* fix: cors ํ”„๋กœํŠธ์—”๋“œ ๋„๋ฉ”์ธ ์ถ”๊ฐ€

* hotfix/method_allowed_patch-HwuanPage (#86)

* Refactor/exception hwuan page (#87)

* refacotr/favorite-Exception-update

* fix kakao_redirect_uri

* Feature/map service refactoring 76 gunwoong (#85)

* feat: mapServiceRefactoring

* refactoring: spot detail refactoring

* refactoring: GeoUtils refactoring

* test: repository test disable for prod

* fix: apply flyway to yml

* fix: disable test

* refactor: khoa refactoring

* fix: bug

* fix: sql

* fix: yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€

* fix: detail field name ์ˆ˜์ •

* feature: ์Šค์ผ€์ค„๋ง ๋น„๋™๊ธฐ ๊ตฌํ˜„ (#91)

* refactor: cacheable (#103)

* Fix/meeting urland role (#100)

* fix : MeetingServiceImpl
getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง€ host ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€

* fix : MeetingRepository

getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง€ host ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€

* fix : MeetingError

MEETING_MEMBER_NOT_FOUND ์—๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ฏธํŒ…์—์„œ ๋งด๋ฒ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค.

* fix : MeetingController

MeetingController ์—์„œ role ์„ ํ™•์ธํ•˜์—ฌ ์ถ”๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

URL ๊ฐœ์„ ์— ์˜ํ•œ ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

@disabled ์ถ”๊ฐ€ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat: ํšŒ์› ํƒˆํ‡ด ์‹œ ์นด์นด์˜ค ์—ฐ๊ฒฐ ๋Š๊ธฐ๋„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•œ๋‹ค. (#98)

* feat: member ์‚ญ์ œ ์‹œ kakao ์—ฐ๊ฒฐ ๋Š๊ธฐ ๋กœ์ง๋„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๊ตฌํ˜„

* test: ๋ณ€๊ฒฝ ์‚ฌํ•ญ test

* feat : Meeting์˜ ์ปค์„œ๋ฐฉ์‹์—์„œ ๋งคํ•‘์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. (#94)

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ณผ์ •์—์„œ pkce๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ ๊ด€์ ์—์„œ ๊ฐœ์„  (#106)

* feat: ๋ณด์•ˆ ์ธ์ฆ ๊ณผ์ •์—์„œ PKCE ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌํ˜„

* test: ๋ณ€๊ฒฝ ์‚ฌํ•ญ test ์ถ”๊ฐ€

* feat: PKCE ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ ์ฝ”๋“œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ

* test: PKCE ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ test

* refactor: PKCE ์ƒ์„ฑ์„ ํด๋ผ์ด์–ธํŠธ ์—๊ฒŒ ๋„˜๊ธด๋‹ค.

* test: pkce test ํ”Œ๋กœ์šฐ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ

* fix: member entity์˜ nickname ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค

* fix: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด SchedulerService.java ์˜ @RequiredArgsConstrucor ์ง€์šด ๋ถ€๋ถ„ ๋ณต๊ตฌ

* fix: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด SchedulerService.java ์˜ @RequiredArgsConstrucor ์ง€์šด ๋ถ€๋ถ„ ๋ณต๊ตฌ

* refactor: open-meteo ์„œ๋น„์Šค ๊ด€๋ จ ๋ฆฌํŒฉํ† ๋ง (#95)

* refactor: RichDomain์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค. (#105)

* Fix: login redirect (#107)

* fix: ๋กœ๊ทธ์ธ ์š”์ฒญ๋•Œ์˜ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri๋ฅผ ํ† ํฐ ๊ตํ™˜์‹œ์—๋„ ์‚ฌ์šฉ

* test: test

* fix: fallback ์ƒํ™ฉ์—์„œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri ์ฐพ๋Š” ๋กœ์ง ์ถ”๊ฐ€

* Refactor/meeting rich domain (#110)

* refactor: RichDomain์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค.

* refactor: ๋ˆ„๋ฝ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ด ์žˆ์–ด ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

* build: caffenine ์ ์šฉ

* relase (#111) (#112)

* git initialize

* feature/swagger-03-gunwoong (#5)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/OpenAPI Test/02-HwuanPage

* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage

* feat: entity, repositor ๊ตฌํ˜„

* feat: ์˜ˆ์ƒ dto ๊ตฌํ˜„

* chore: ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ์ธ ๊ตฌํ˜„ & ์ดํ›„ ํ† ํฐ ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* fix: AuthCotnroller ์ˆ˜์ •

* fix: ํด๋ผ์ด์–ธํŠธ์—์„œ ์นด์นด์˜ค์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„ ์„œ๋ฒ„๋กœ post ํ•˜๊ฒŒ ์ˆ˜์ •

* feat: ํ† ํฐ ๊ฒ€์ฆ

* feat: refresh token ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง ๊ตฌํ˜„

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ & ์žฌ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* feat: SecurityFilterChain ์—”๋“œ ํฌ์ธํŠธ ํ—ˆ์šฉ

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„

* feat: redis์—์„œ refreshToken ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ

* refactor: controller์— ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ ๋˜์–ด ์žˆ๋˜ ๋กœ์ง๋“ค ๋ถ„๋ฆฌ

* test: member ๊ด€๋ จ ํ…Œ์ŠคํŠธ

* chore: ํ•˜๋“œ์ฝ”๋”ฉํ•œ ์ค‘์š” ๊ฐ’ Intellij IDEA ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •

* refactor: state ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ธ์…˜ ์ถ”๊ฐ€

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* format: naver formatter๋กœ ํฌ๋งคํŒ…

* chore: application-dev

* fix: customException ์ฒ˜๋ฆฌ

* Feat/meeting interface (#19)

* feat : MeetingService ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

* feat : ParticipantResponse

* feat : MeetingListResponse ๊ตฌํ˜„

* feat : MeetingDetailResponse๊ตฌํ˜„

* feat : MeetingDetailAndMemberResponse ๊ตฌํ˜„

* feat : ListSpot ๊ตฌํ˜„

* feat : DetailSpot ๊ตฌํ˜„

* feat : CreateMeetingRequest ๊ตฌํ˜„

* feat : Tag ๊ตฌํ˜„

* feat : Long -> long ๋ณ€๊ฒฝ

์„œ๋น„์Šค์™€ Entity๋‚ด์—์„œ null๊ฐ’์ด ์ ˆ๋Œ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฐ’์„ long์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

-> ๋ฌดํ•œํŽ˜์ด์ง€๋กœ๋”ฉํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์—ˆ์Šต๋‹ˆ๋‹ค.

* Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java



---------



* Feature/FavoritesAndAlertInterface-16-HwuanPage

* feature/FavoritesAndAlertInterface-16-HwuanPage

* Update AlertMapper.java

* Update JellyfishRegionDensityRepository.java

* Update AlertController.java

* Update FavoriteController.java

* Update FavoriteRepository.java

* Update AlertController.java

* Update JellyfishSpieces.java

* Update JellyfishRegion.java

* Update JellyfishRegion.java

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feat: spot service (#34)

* feat: spot service

* feat: spot service ๊ณ ๋„ํ™” ๋ฐ ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* hotfix: duplicated controller method

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* Feature/spot preview 40 gunwoong (#41)

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* hotfix: jpa metamodel fix

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* Feature/Alert-22-HwuanPage

* Create Pdf Parser

* Web crawler run perpectly,but pdfparser do not work well

* PDF parse to stack DB complete with OPENAI

* CallAlert Complete

* JellyFish PDF parsing work well

* feature/ControllerTest Complete

* feature/JellyfishAlert-26-HwuanPage

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#49)

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

* refactor: ๋ฆฌํŒฉํ† ๋ง

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* Feature/integration init (#54)

* feature/IntegrationSet(test&Build)-52-HwuanPage

* data.sql unique update

* image build needs

* ignore dev.yml

* remove dev.yml tracking and ignore it

* prod

* proded

* Feature/activities 17 audwls239 (#56)

* feature: ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค ์ƒ์„ฑ

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์กฐํšŒ(์œ„์น˜ ๊ธฐ๋ฐ˜)

* feature: DTO ์ถ”๊ฐ€

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์กฐํšŒ(๊ธ€๋กœ๋ฒŒ) ์ถ”๊ฐ€, ์ปจํŠธ๋กค๋Ÿฌ ์ˆ˜์ •

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์ƒ์„ธ ์กฐํšŒ(๋ฏธ์™„์„ฑ)

* feature: ํ•ด์–‘ ์ •๋ณด ์กฐํšŒ

* feature: ํ™œ๋™ ์ƒ์„ธ ์กฐํšŒ

---------



* feat : ParticipantError ์ž…๋‹ˆ๋‹ค.

* hotfix: error fix

* fix : Directory ์ˆ˜์ •์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. (#57)

* hotfix: error fix

* feat: member delete (#58)

* fix: ๋ฉค๋ฒ„ ์‚ญ์ œ ๊ตฌํ˜„

* feat: ๋ฉค๋ฒ„ ์‚ญ์ œ, ์œ„/๊ฒฝ๋„ ์ˆ˜์ • ๊ตฌํ˜„

* test: ํ…Œ์ŠคํŠธ ์ˆ˜์ •

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/MemberRepository.java

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/OutdoorSpotSpotRepository.java

* Delete src/main/resources/test.http

---------




* fix : ParticipantRepository (#59)

existsByMeetingIdAndUserId ๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix : ParticipantRepository (#60)

memberId -> userId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix: token (#61)

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

# Conflicts:
#	src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java
#	src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* feat: ํ…Œ์ŠคํŠธ์šฉ ์•ก์„ธ์Šค ํ† ํฐ ์ƒ์„ฑ

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

# Conflicts:
#	src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java
#	src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* fix : jellyfish ๋ถ€๋ถ„

* fix: activity ๋ถ€๋ถ„

* fix: member ๋ถ€๋ถ„

* fix: member ๋ถ€๋ถ„

* fix: spot ๋ถ€๋ถ„

* fix: forecast ๋ถ€๋ถ„

* fix: favorite ๋ถ€๋ถ„

* fix: alert ๋ถ€๋ถ„

* fix: meeting ๋ถ€๋ถ„

---------







* hotfix/fix-alert&favorites-62-HwuanPage

* fix(hotfix/Meeting) : rebase๋กœ ์ธํ•œ ์ฝ”๋“œ ๋ˆ„๋ฝ ์ˆ˜์ • (#65)

* hotfix: ์ฝ”๋“œ ๋ˆ„๋ฝ ํ•ด๊ฒฐ (#67)

* Fix/fix 70 gunwoong (#71)

* hotfix: fix

* hotfix: fix

* hotfix: fix

* fix: application-prod.yml์—์„œ ์ฟ ํ‚ค๋ฅผ ์“ธ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ • (#69)

* fix: application-prod.yml์—์„œ ์ฟ ํ‚ค๋ฅผ ์“ธ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ •

* test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

* fix: activities ์‹œํ๋ฆฌํ‹ฐ ์—”๋“œํฌ์ธํŠธ ํ—ˆ์šฉ. redirecturi ์ˆ˜์ •

* Chore/docker set andvariable-68-hwuanPage

* chore/ReadytoDeployv1.0.0-68-HuwanPage

* chore/ReadytoDeploymentv1.0.0-68-HuwanPage

* remove etc

* prod

* refactor: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค. (#74)

* Feat/meeting test 75 (#77)

* feat : Meetingtest ๋ฅผ ์œ„ํ•œ Util ํŒŒ์ผ์ž…๋‹ˆ๋‹ˆ๋‹ค.

* feat : Meetingtest ๋ฅผ ์œ„ํ•œ Util ํŒŒ์ผ์ž…๋‹ˆ๋‹ˆ๋‹ค.

* feat : MeetingServiceImplTest ๋‹จ์œ„ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

* feat : MeetingControllerTest ํ†ตํ•ฉํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

* feat : Build Lombok์„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ˆ˜์ •์ž…๋‹ˆ๋‹ค.

* feat : Tag ์—”ํ‹ฐํ‹ฐ

Tag List<String> content ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl

* feat : MeetingServiceImpl์—์„œ ์ˆ˜์ •ํ•˜๋Š” ์‘๋‹ต์„ ์ˆ˜์ • , ๋งคํผ๋ฅผ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : Meeting์—์„œ ํ•„์š”ํ•œ url์„ ์—ด์–ด๋’€์Šต๋‹ˆ๋‹ค.

* space prob solve

* stack-trace-DEBUG

* hotfix/data.sql deprecate-HwuanPage (#79)

* hotfix/data.sql deprecate-HwuanPage

* portnum fix

* Xtest

* test X

* workflow fix

* add id

* fix docker-compose-image-root

* release/v1-marineleisure

* fix: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค. (#83)

* fix: cors ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฐํฌ ๋„๋ฉ”์ธ ์ถ”๊ฐ€ (#84)

* fix: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค.

* fix: cors ํ”„๋กœํŠธ์—”๋“œ ๋„๋ฉ”์ธ ์ถ”๊ฐ€

* hotfix/method_allowed_patch-HwuanPage (#86)

* Refactor/exception hwuan page (#87)

* refacotr/favorite-Exception-update

* fix kakao_redirect_uri

* Feature/map service refactoring 76 gunwoong (#85)

* feat: mapServiceRefactoring

* refactoring: spot detail refactoring

* refactoring: GeoUtils refactoring

* test: repository test disable for prod

* fix: apply flyway to yml

* fix: disable test

* refactor: khoa refactoring

* fix: bug

* fix: sql

* fix: yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€

* fix: detail field name ์ˆ˜์ •

* feature: ์Šค์ผ€์ค„๋ง ๋น„๋™๊ธฐ ๊ตฌํ˜„ (#91)

* refactor: cacheable (#103)

* Fix/meeting urland role (#100)

* fix : MeetingServiceImpl
getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง€ host ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€

* fix : MeetingRepository

getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง€ host ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€

* fix : MeetingError

MEETING_MEMBER_NOT_FOUND ์—๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ฏธํŒ…์—์„œ ๋งด๋ฒ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค.

* fix : MeetingController

MeetingController ์—์„œ role ์„ ํ™•์ธํ•˜์—ฌ ์ถ”๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

URL ๊ฐœ์„ ์— ์˜ํ•œ ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

@disabled ์ถ”๊ฐ€ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat: ํšŒ์› ํƒˆํ‡ด ์‹œ ์นด์นด์˜ค ์—ฐ๊ฒฐ ๋Š๊ธฐ๋„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•œ๋‹ค. (#98)

* feat: member ์‚ญ์ œ ์‹œ kakao ์—ฐ๊ฒฐ ๋Š๊ธฐ ๋กœ์ง๋„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๊ตฌํ˜„

* test: ๋ณ€๊ฒฝ ์‚ฌํ•ญ test

* feat : Meeting์˜ ์ปค์„œ๋ฐฉ์‹์—์„œ ๋งคํ•‘์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. (#94)

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ณผ์ •์—์„œ pkce๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ ๊ด€์ ์—์„œ ๊ฐœ์„  (#106)

* feat: ๋ณด์•ˆ ์ธ์ฆ ๊ณผ์ •์—์„œ PKCE ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌํ˜„

* test: ๋ณ€๊ฒฝ ์‚ฌํ•ญ test ์ถ”๊ฐ€

* feat: PKCE ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ ์ฝ”๋“œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ

* test: PKCE ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ test

* refactor: PKCE ์ƒ์„ฑ์„ ํด๋ผ์ด์–ธํŠธ ์—๊ฒŒ ๋„˜๊ธด๋‹ค.

* test: pkce test ํ”Œ๋กœ์šฐ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ

* fix: member entity์˜ nickname ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค

* fix: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด SchedulerService.java ์˜ @RequiredArgsConstrucor ์ง€์šด ๋ถ€๋ถ„ ๋ณต๊ตฌ

* fix: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด SchedulerService.java ์˜ @RequiredArgsConstrucor ์ง€์šด ๋ถ€๋ถ„ ๋ณต๊ตฌ

* refactor: open-meteo ์„œ๋น„์Šค ๊ด€๋ จ ๋ฆฌํŒฉํ† ๋ง (#95)

* refactor: RichDomain์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค. (#105)

* Fix: login redirect (#107)

* fix: ๋กœ๊ทธ์ธ ์š”์ฒญ๋•Œ์˜ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri๋ฅผ ํ† ํฐ ๊ตํ™˜์‹œ์—๋„ ์‚ฌ์šฉ

* test: test

* fix: fallback ์ƒํ™ฉ์—์„œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri ์ฐพ๋Š” ๋กœ์ง ์ถ”๊ฐ€

* Refactor/meeting rich domain (#110)

* refactor: RichDomain์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค.

* refactor: ๋ˆ„๋ฝ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ด ์žˆ์–ด ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

* build: caffenine ์ ์šฉ

---------








* fix: fallback ์ƒํ™ฉ์—์„œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri ์ฐพ๋Š” ๋กœ์ง ์ถ”๊ฐ€ (#113)

* release (#114) (#115)

* git initialize

* feature/swagger-03-gunwoong (#5)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/OpenAPI Test/02-HwuanPage

* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage

* feat: entity, repositor ๊ตฌํ˜„

* feat: ์˜ˆ์ƒ dto ๊ตฌํ˜„

* chore: ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ์ธ ๊ตฌํ˜„ & ์ดํ›„ ํ† ํฐ ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* fix: AuthCotnroller ์ˆ˜์ •

* fix: ํด๋ผ์ด์–ธํŠธ์—์„œ ์นด์นด์˜ค์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„ ์„œ๋ฒ„๋กœ post ํ•˜๊ฒŒ ์ˆ˜์ •

* feat: ํ† ํฐ ๊ฒ€์ฆ

* feat: refresh token ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง ๊ตฌํ˜„

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ & ์žฌ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* feat: SecurityFilterChain ์—”๋“œ ํฌ์ธํŠธ ํ—ˆ์šฉ

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„

* feat: redis์—์„œ refreshToken ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ

* refactor: controller์— ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ ๋˜์–ด ์žˆ๋˜ ๋กœ์ง๋“ค ๋ถ„๋ฆฌ

* test: member ๊ด€๋ จ ํ…Œ์ŠคํŠธ

* chore: ํ•˜๋“œ์ฝ”๋”ฉํ•œ ์ค‘์š” ๊ฐ’ Intellij IDEA ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •

* refactor: state ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ธ์…˜ ์ถ”๊ฐ€

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* format: naver formatter๋กœ ํฌ๋งคํŒ…

* chore: application-dev

* fix: customException ์ฒ˜๋ฆฌ

* Feat/meeting interface (#19)

* feat : MeetingService ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

* feat : ParticipantResponse

* feat : MeetingListResponse ๊ตฌํ˜„

* feat : MeetingDetailResponse๊ตฌํ˜„

* feat : MeetingDetailAndMemberResponse ๊ตฌํ˜„

* feat : ListSpot ๊ตฌํ˜„

* feat : DetailSpot ๊ตฌํ˜„

* feat : CreateMeetingRequest ๊ตฌํ˜„

* feat : Tag ๊ตฌํ˜„

* feat : Long -> long ๋ณ€๊ฒฝ

์„œ๋น„์Šค์™€ Entity๋‚ด์—์„œ null๊ฐ’์ด ์ ˆ๋Œ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฐ’์„ long์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

-> ๋ฌดํ•œํŽ˜์ด์ง€๋กœ๋”ฉํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์—ˆ์Šต๋‹ˆ๋‹ค.

* Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java



---------



* Feature/FavoritesAndAlertInterface-16-HwuanPage

* feature/FavoritesAndAlertInterface-16-HwuanPage

* Update AlertMapper.java

* Update JellyfishRegionDensityRepository.java

* Update AlertController.java

* Update FavoriteController.java

* Update FavoriteRepository.java

* Update AlertController.java

* Update JellyfishSpieces.java

* Update JellyfishRegion.java

* Update JellyfishRegion.java

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feat: spot service (#34)

* feat: spot service

* feat: spot service ๊ณ ๋„ํ™” ๋ฐ ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* hotfix: duplicated controller method

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* Feature/spot preview 40 gunwoong (#41)

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* hotfix: jpa metamodel fix

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* Feature/Alert-22-HwuanPage

* Create Pdf Parser

* Web crawler run perpectly,but pdfparser do not work well

* PDF parse to stack DB complete with OPENAI

* CallAlert Complete

* JellyFish PDF parsing work well

* feature/ControllerTest Complete

* feature/JellyfishAlert-26-HwuanPage

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#49)

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

* refactor: ๋ฆฌํŒฉํ† ๋ง

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ โ€ฆ

Co-authored-by: HwuanPage <[email protected]>
Co-authored-by: JaeoneHeo <[email protected]>
Co-authored-by: LEESUNBIN <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: MyungJin <[email protected]>
Co-authored-by: iseonbin <[email protected]>
Co-authored-by: MyungJin <[email protected]>
* hotfix: jellyfish

* hotfix: favorite
* Refactor<Meeting> :: TagRepository.java

findContentByMeetingId :: ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ์‚ญ์ œ
findByMeetingIdIn :: Map_Batch ๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ

* Refactor<Meeting> :: ParticipantRepository

countByMeetingIdIn :: Map์—์„œ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์„œ๋“œ

* Refactor<Meeting> :: MeetingServiceImpl

๋น„๊ด€์  ๋ฝ ํ™œ์šฉ์„ ์œ„ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

* Refactor<Meeting> :: MeetingDomainService

๋น„๊ด€์  ๋ฝ ํ™œ์šฉ์„ ์œ„ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

* Refactor<Meeting> :: MeetingRepository.java

๋น„๊ด€์  ๋ฝ ํ™œ์šฉ์„ ์œ„ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

* Refactor<Meeting> :: MeetingController.java

Map_Batch์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

* Refactor<Meeting> :: MeetingControllerTest

๋™์‹œ์„ฑ ํŒ๋‹จ์„ ์œ„ํ•œ Controller ํ…Œ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.

* Refactor<Meeting> :: Meeting_test_docs.md

์ด๋ฒˆ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ฉด์„œ ์ž‘์„ฑํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

* Refactor<Meeting> :: Meeting_test_docs.md

code

* Refactor<Meeting> :: Meeting_test_docs.md

code

* Refactor<Meeting> :: Meeting_test_docs.md

code

* Refactor<Meeting> :: ๋™์‹œ์„ฑ๋ฌธ์ œ.md
* Refactor<MeetingController> :: goingMeeting

MeetingStatus ๋ฅผ ONGOING์œผ๋กœ ๋ฐ”๊พธ๋Š” URL ์ž…๋‹ˆ๋‹ค.

* Refactor<MeetingError> :: MetingError

OnGoingMeeting ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์—๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* Refactor<MeetingService> :: goingMeeting

goingMeeting ์„œ๋น„์Šค ๋กœ์ง ์ƒ์„ฑ

* Refactor<MeetingValidate> ::

์ฃผ์„ ์ฒ˜๋ฆฌํ•œ ์ฝ”๋“œ ์‚ญ์ œ ๋ฐ Ongoing์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•œ ๊ฒ€์ฆ ๋กœ์ง์ด ์ƒ์„ฑ

* Refactor<GoingMeetingResponse> ::

body์— json ์„ ๋„ฃ๊ธฐ์œ„ํ•ด ResponseDto๋ฅผ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* Refactor<TEST> ::

๊ฐ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ์„œ๋น„์Šค์˜ ๋‹จ์œ„ํ…Œ์ŠคํŠธ์™€ ํ†ตํ•ฉํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* Feat/delete meeting-136 (#137)

* feat<DELETE> :: TagRepository , ParticipantRepository,

Meeting์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ๊ณ„์ ์ธ ์‚ญ์ œ Cascaede๋ฅผ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat<DELETE> :: MeetingServiceImpl , MeetingService , MeetingController

Meeting์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•œ URL ์ž…๋‹ˆ๋‹ค.

* feat<DELETE> :: MeetingControllerTest,  MeetingServiceImplTest

Meeting์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•œ URL ํ…Œ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.
โ€ฆ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ˆ˜๋™ URL ์ด์ง€๋งŒ ๊ตณ์ด ํ•„์š”๋Š” ์—†์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (#140)
* feature: flyway

* hotfix: activity detail
* git initialize

* feature/swagger-03-gunwoong (#5)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/OpenAPI Test/02-HwuanPage

* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage

* feat: entity, repositor ๊ตฌํ˜„

* feat: ์˜ˆ์ƒ dto ๊ตฌํ˜„

* chore: ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ์ธ ๊ตฌํ˜„ & ์ดํ›„ ํ† ํฐ ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* fix: AuthCotnroller ์ˆ˜์ •

* fix: ํด๋ผ์ด์–ธํŠธ์—์„œ ์นด์นด์˜ค์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„ ์„œ๋ฒ„๋กœ post ํ•˜๊ฒŒ ์ˆ˜์ •

* feat: ํ† ํฐ ๊ฒ€์ฆ

* feat: refresh token ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง ๊ตฌํ˜„

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ & ์žฌ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* feat: SecurityFilterChain ์—”๋“œ ํฌ์ธํŠธ ํ—ˆ์šฉ

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„

* feat: redis์—์„œ refreshToken ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ

* refactor: controller์— ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ ๋˜์–ด ์žˆ๋˜ ๋กœ์ง๋“ค ๋ถ„๋ฆฌ

* test: member ๊ด€๋ จ ํ…Œ์ŠคํŠธ

* chore: ํ•˜๋“œ์ฝ”๋”ฉํ•œ ์ค‘์š” ๊ฐ’ Intellij IDEA ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •

* refactor: state ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ธ์…˜ ์ถ”๊ฐ€

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* format: naver formatter๋กœ ํฌ๋งคํŒ…

* chore: application-dev

* fix: customException ์ฒ˜๋ฆฌ

* Feat/meeting interface (#19)

* feat : MeetingService ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

* feat : ParticipantResponse

* feat : MeetingListResponse ๊ตฌํ˜„

* feat : MeetingDetailResponse๊ตฌํ˜„

* feat : MeetingDetailAndMemberResponse ๊ตฌํ˜„

* feat : ListSpot ๊ตฌํ˜„

* feat : DetailSpot ๊ตฌํ˜„

* feat : CreateMeetingRequest ๊ตฌํ˜„

* feat : Tag ๊ตฌํ˜„

* feat : Long -> long ๋ณ€๊ฒฝ

์„œ๋น„์Šค์™€ Entity๋‚ด์—์„œ null๊ฐ’์ด ์ ˆ๋Œ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฐ’์„ long์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

-> ๋ฌดํ•œํŽ˜์ด์ง€๋กœ๋”ฉํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์—ˆ์Šต๋‹ˆ๋‹ค.

* Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java



---------



* Feature/FavoritesAndAlertInterface-16-HwuanPage

* feature/FavoritesAndAlertInterface-16-HwuanPage

* Update AlertMapper.java

* Update JellyfishRegionDensityRepository.java

* Update AlertController.java

* Update FavoriteController.java

* Update FavoriteRepository.java

* Update AlertController.java

* Update JellyfishSpieces.java

* Update JellyfishRegion.java

* Update JellyfishRegion.java

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feat: spot service (#34)

* feat: spot service

* feat: spot service ๊ณ ๋„ํ™” ๋ฐ ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* hotfix: duplicated controller method

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* Feature/spot preview 40 gunwoong (#41)

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* hotfix: jpa metamodel fix

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* Feature/Alert-22-HwuanPage

* Create Pdf Parser

* Web crawler run perpectly,but pdfparser do not work well

* PDF parse to stack DB complete with OPENAI

* CallAlert Complete

* JellyFish PDF parsing work well

* feature/ControllerTest Complete

* feature/JellyfishAlert-26-HwuanPage

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#49)

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

* refactor: ๋ฆฌํŒฉํ† ๋ง

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* Feature/integration init (#54)

* feature/IntegrationSet(test&Build)-52-HwuanPage

* data.sql unique update

* image build needs

* ignore dev.yml

* remove dev.yml tracking and ignore it

* prod

* proded

* Feature/activities 17 audwls239 (#56)

* feature: ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค ์ƒ์„ฑ

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์กฐํšŒ(์œ„์น˜ ๊ธฐ๋ฐ˜)

* feature: DTO ์ถ”๊ฐ€

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์กฐํšŒ(๊ธ€๋กœ๋ฒŒ) ์ถ”๊ฐ€, ์ปจํŠธ๋กค๋Ÿฌ ์ˆ˜์ •

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์ƒ์„ธ ์กฐํšŒ(๋ฏธ์™„์„ฑ)

* feature: ํ•ด์–‘ ์ •๋ณด ์กฐํšŒ

* feature: ํ™œ๋™ ์ƒ์„ธ ์กฐํšŒ

---------



* feat : ParticipantError ์ž…๋‹ˆ๋‹ค.

* hotfix: error fix

* fix : Directory ์ˆ˜์ •์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. (#57)

* hotfix: error fix

* feat: member delete (#58)

* fix: ๋ฉค๋ฒ„ ์‚ญ์ œ ๊ตฌํ˜„

* feat: ๋ฉค๋ฒ„ ์‚ญ์ œ, ์œ„/๊ฒฝ๋„ ์ˆ˜์ • ๊ตฌํ˜„

* test: ํ…Œ์ŠคํŠธ ์ˆ˜์ •

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/MemberRepository.java

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/OutdoorSpotSpotRepository.java

* Delete src/main/resources/test.http

---------




* fix : ParticipantRepository (#59)

existsByMeetingIdAndUserId ๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix : ParticipantRepository (#60)

memberId -> userId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix: token (#61)

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

# Conflicts:
#	src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java
#	src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* feat: ํ…Œ์ŠคํŠธ์šฉ ์•ก์„ธ์Šค ํ† ํฐ ์ƒ์„ฑ

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

# Conflicts:
#	src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java
#	src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* fix : jellyfish ๋ถ€๋ถ„

* fix: activity ๋ถ€๋ถ„

* fix: member ๋ถ€๋ถ„

* fix: member ๋ถ€๋ถ„

* fix: spot ๋ถ€๋ถ„

* fix: forecast ๋ถ€๋ถ„

* fix: favorite ๋ถ€๋ถ„

* fix: alert ๋ถ€๋ถ„

* fix: meeting ๋ถ€๋ถ„

---------







* hotfix/fix-alert&favorites-62-HwuanPage

* fix(hotfix/Meeting) : rebase๋กœ ์ธํ•œ ์ฝ”๋“œ ๋ˆ„๋ฝ ์ˆ˜์ • (#65)

* hotfix: ์ฝ”๋“œ ๋ˆ„๋ฝ ํ•ด๊ฒฐ (#67)

* Fix/fix 70 gunwoong (#71)

* hotfix: fix

* hotfix: fix

* hotfix: fix

* fix: application-prod.yml์—์„œ ์ฟ ํ‚ค๋ฅผ ์“ธ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ • (#69)

* fix: application-prod.yml์—์„œ ์ฟ ํ‚ค๋ฅผ ์“ธ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ •

* test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

* fix: activities ์‹œํ๋ฆฌํ‹ฐ ์—”๋“œํฌ์ธํŠธ ํ—ˆ์šฉ. redirecturi ์ˆ˜์ •

* Chore/docker set andvariable-68-hwuanPage

* chore/ReadytoDeployv1.0.0-68-HuwanPage

* chore/ReadytoDeploymentv1.0.0-68-HuwanPage

* remove etc

* prod

* refactor: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค. (#74)

* Feat/meeting test 75 (#77)

* feat : Meetingtest ๋ฅผ ์œ„ํ•œ Util ํŒŒ์ผ์ž…๋‹ˆ๋‹ˆ๋‹ค.

* feat : Meetingtest ๋ฅผ ์œ„ํ•œ Util ํŒŒ์ผ์ž…๋‹ˆ๋‹ˆ๋‹ค.

* feat : MeetingServiceImplTest ๋‹จ์œ„ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

* feat : MeetingControllerTest ํ†ตํ•ฉํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

* feat : Build Lombok์„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ˆ˜์ •์ž…๋‹ˆ๋‹ค.

* feat : Tag ์—”ํ‹ฐํ‹ฐ

Tag List<String> content ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl

* feat : MeetingServiceImpl์—์„œ ์ˆ˜์ •ํ•˜๋Š” ์‘๋‹ต์„ ์ˆ˜์ • , ๋งคํผ๋ฅผ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : Meeting์—์„œ ํ•„์š”ํ•œ url์„ ์—ด์–ด๋’€์Šต๋‹ˆ๋‹ค.

* space prob solve

* stack-trace-DEBUG

* hotfix/data.sql deprecate-HwuanPage (#79)

* hotfix/data.sql deprecate-HwuanPage

* portnum fix

* Xtest

* test X

* workflow fix

* add id

* fix docker-compose-image-root

* release/v1-marineleisure

* fix: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค. (#83)

* fix: cors ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฐํฌ ๋„๋ฉ”์ธ ์ถ”๊ฐ€ (#84)

* fix: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค.

* fix: cors ํ”„๋กœํŠธ์—”๋“œ ๋„๋ฉ”์ธ ์ถ”๊ฐ€

* hotfix/method_allowed_patch-HwuanPage (#86)

* Refactor/exception hwuan page (#87)

* refacotr/favorite-Exception-update

* fix kakao_redirect_uri

* Feature/map service refactoring 76 gunwoong (#85)

* feat: mapServiceRefactoring

* refactoring: spot detail refactoring

* refactoring: GeoUtils refactoring

* test: repository test disable for prod

* fix: apply flyway to yml

* fix: disable test

* refactor: khoa refactoring

* fix: bug

* fix: sql

* fix: yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€

* fix: detail field name ์ˆ˜์ •

* feature: ์Šค์ผ€์ค„๋ง ๋น„๋™๊ธฐ ๊ตฌํ˜„ (#91)

* refactor: cacheable (#103)

* Fix/meeting urland role (#100)

* fix : MeetingServiceImpl
getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง€ host ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€

* fix : MeetingRepository

getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง€ host ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€

* fix : MeetingError

MEETING_MEMBER_NOT_FOUND ์—๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ฏธํŒ…์—์„œ ๋งด๋ฒ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค.

* fix : MeetingController

MeetingController ์—์„œ role ์„ ํ™•์ธํ•˜์—ฌ ์ถ”๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

URL ๊ฐœ์„ ์— ์˜ํ•œ ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

@disabled ์ถ”๊ฐ€ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat: ํšŒ์› ํƒˆํ‡ด ์‹œ ์นด์นด์˜ค ์—ฐ๊ฒฐ ๋Š๊ธฐ๋„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•œ๋‹ค. (#98)

* feat: member ์‚ญ์ œ ์‹œ kakao ์—ฐ๊ฒฐ ๋Š๊ธฐ ๋กœ์ง๋„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๊ตฌํ˜„

* test: ๋ณ€๊ฒฝ ์‚ฌํ•ญ test

* feat : Meeting์˜ ์ปค์„œ๋ฐฉ์‹์—์„œ ๋งคํ•‘์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. (#94)

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ณผ์ •์—์„œ pkce๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ ๊ด€์ ์—์„œ ๊ฐœ์„  (#106)

* feat: ๋ณด์•ˆ ์ธ์ฆ ๊ณผ์ •์—์„œ PKCE ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌํ˜„

* test: ๋ณ€๊ฒฝ ์‚ฌํ•ญ test ์ถ”๊ฐ€

* feat: PKCE ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ ์ฝ”๋“œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ

* test: PKCE ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ test

* refactor: PKCE ์ƒ์„ฑ์„ ํด๋ผ์ด์–ธํŠธ ์—๊ฒŒ ๋„˜๊ธด๋‹ค.

* test: pkce test ํ”Œ๋กœ์šฐ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ

* fix: member entity์˜ nickname ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค

* fix: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด SchedulerService.java ์˜ @RequiredArgsConstrucor ์ง€์šด ๋ถ€๋ถ„ ๋ณต๊ตฌ

* fix: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด SchedulerService.java ์˜ @RequiredArgsConstrucor ์ง€์šด ๋ถ€๋ถ„ ๋ณต๊ตฌ

* refactor: open-meteo ์„œ๋น„์Šค ๊ด€๋ จ ๋ฆฌํŒฉํ† ๋ง (#95)

* refactor: RichDomain์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค. (#105)

* Fix: login redirect (#107)

* fix: ๋กœ๊ทธ์ธ ์š”์ฒญ๋•Œ์˜ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri๋ฅผ ํ† ํฐ ๊ตํ™˜์‹œ์—๋„ ์‚ฌ์šฉ

* test: test

* fix: fallback ์ƒํ™ฉ์—์„œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri ์ฐพ๋Š” ๋กœ์ง ์ถ”๊ฐ€

* Refactor/meeting rich domain (#110)

* refactor: RichDomain์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค.

* refactor: ๋ˆ„๋ฝ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ด ์žˆ์–ด ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

* build: caffenine ์ ์šฉ

* relase (#111) (#112)

* git initialize

* feature/swagger-03-gunwoong (#5)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/OpenAPI Test/02-HwuanPage

* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage

* feat: entity, repositor ๊ตฌํ˜„

* feat: ์˜ˆ์ƒ dto ๊ตฌํ˜„

* chore: ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ์ธ ๊ตฌํ˜„ & ์ดํ›„ ํ† ํฐ ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* fix: AuthCotnroller ์ˆ˜์ •

* fix: ํด๋ผ์ด์–ธํŠธ์—์„œ ์นด์นด์˜ค์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„ ์„œ๋ฒ„๋กœ post ํ•˜๊ฒŒ ์ˆ˜์ •

* feat: ํ† ํฐ ๊ฒ€์ฆ

* feat: refresh token ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง ๊ตฌํ˜„

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ & ์žฌ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* feat: SecurityFilterChain ์—”๋“œ ํฌ์ธํŠธ ํ—ˆ์šฉ

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„

* feat: redis์—์„œ refreshToken ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ

* refactor: controller์— ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ ๋˜์–ด ์žˆ๋˜ ๋กœ์ง๋“ค ๋ถ„๋ฆฌ

* test: member ๊ด€๋ จ ํ…Œ์ŠคํŠธ

* chore: ํ•˜๋“œ์ฝ”๋”ฉํ•œ ์ค‘์š” ๊ฐ’ Intellij IDEA ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •

* refactor: state ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ธ์…˜ ์ถ”๊ฐ€

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* format: naver formatter๋กœ ํฌ๋งคํŒ…

* chore: application-dev

* fix: customException ์ฒ˜๋ฆฌ

* Feat/meeting interface (#19)

* feat : MeetingService ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

* feat : ParticipantResponse

* feat : MeetingListResponse ๊ตฌํ˜„

* feat : MeetingDetailResponse๊ตฌํ˜„

* feat : MeetingDetailAndMemberResponse ๊ตฌํ˜„

* feat : ListSpot ๊ตฌํ˜„

* feat : DetailSpot ๊ตฌํ˜„

* feat : CreateMeetingRequest ๊ตฌํ˜„

* feat : Tag ๊ตฌํ˜„

* feat : Long -> long ๋ณ€๊ฒฝ

์„œ๋น„์Šค์™€ Entity๋‚ด์—์„œ null๊ฐ’์ด ์ ˆ๋Œ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฐ’์„ long์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

-> ๋ฌดํ•œํŽ˜์ด์ง€๋กœ๋”ฉํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์—ˆ์Šต๋‹ˆ๋‹ค.

* Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java



---------



* Feature/FavoritesAndAlertInterface-16-HwuanPage

* feature/FavoritesAndAlertInterface-16-HwuanPage

* Update AlertMapper.java

* Update JellyfishRegionDensityRepository.java

* Update AlertController.java

* Update FavoriteController.java

* Update FavoriteRepository.java

* Update AlertController.java

* Update JellyfishSpieces.java

* Update JellyfishRegion.java

* Update JellyfishRegion.java

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feat: spot service (#34)

* feat: spot service

* feat: spot service ๊ณ ๋„ํ™” ๋ฐ ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* hotfix: duplicated controller method

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* Feature/spot preview 40 gunwoong (#41)

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* hotfix: jpa metamodel fix

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* Feature/Alert-22-HwuanPage

* Create Pdf Parser

* Web crawler run perpectly,but pdfparser do not work well

* PDF parse to stack DB complete with OPENAI

* CallAlert Complete

* JellyFish PDF parsing work well

* feature/ControllerTest Complete

* feature/JellyfishAlert-26-HwuanPage

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#49)

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

* refactor: ๋ฆฌํŒฉํ† ๋ง

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* Feature/integration init (#54)

* feature/IntegrationSet(test&Build)-52-HwuanPage

* data.sql unique update

* image build needs

* ignore dev.yml

* remove dev.yml tracking and ignore it

* prod

* proded

* Feature/activities 17 audwls239 (#56)

* feature: ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค ์ƒ์„ฑ

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์กฐํšŒ(์œ„์น˜ ๊ธฐ๋ฐ˜)

* feature: DTO ์ถ”๊ฐ€

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์กฐํšŒ(๊ธ€๋กœ๋ฒŒ) ์ถ”๊ฐ€, ์ปจํŠธ๋กค๋Ÿฌ ์ˆ˜์ •

* feature: ํ™œ๋™๋ณ„ ์ง€์ˆ˜ ์ƒ์„ธ ์กฐํšŒ(๋ฏธ์™„์„ฑ)

* feature: ํ•ด์–‘ ์ •๋ณด ์กฐํšŒ

* feature: ํ™œ๋™ ์ƒ์„ธ ์กฐํšŒ

---------



* feat : ParticipantError ์ž…๋‹ˆ๋‹ค.

* hotfix: error fix

* fix : Directory ์ˆ˜์ •์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. (#57)

* hotfix: error fix

* feat: member delete (#58)

* fix: ๋ฉค๋ฒ„ ์‚ญ์ œ ๊ตฌํ˜„

* feat: ๋ฉค๋ฒ„ ์‚ญ์ œ, ์œ„/๊ฒฝ๋„ ์ˆ˜์ • ๊ตฌํ˜„

* test: ํ…Œ์ŠคํŠธ ์ˆ˜์ •

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/MemberRepository.java

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/OutdoorSpotSpotRepository.java

* Delete src/main/resources/test.http

---------




* fix : ParticipantRepository (#59)

existsByMeetingIdAndUserId ๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix : ParticipantRepository (#60)

memberId -> userId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix: token (#61)

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

# Conflicts:
#	src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java
#	src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* feat: ํ…Œ์ŠคํŠธ์šฉ ์•ก์„ธ์Šค ํ† ํฐ ์ƒ์„ฑ

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

# Conflicts:
#	src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java
#	src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `createMeeting(Long memberId, CreateMeetingRequest request)`:
       * ๋ชฉ์ : ์ƒˆ๋กœ์šด ๋ชจ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์ฐธ์—ฌ์ž๋กœ ์ž๋™ ๋“ฑ๋กํ•˜๊ณ  ํƒœ๊ทธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
   * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`:
       * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์ž„์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
   * `deleteMeeting(Member member, Long meetingId)`:
       * ๋ชฉ์ : ๋ชจ์ž„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋ฌผ๋ฆฌ์  ์‚ญ์ œ ๋Œ€์‹  ๋…ผ๋ฆฌ์  ์‚ญ์ œ(Soft Delete) ๋ฐฉ์‹ ๋„์ž…์„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค.

* feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java

๊ฒ€์ฆ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MemberError.java , ParticipantRepository

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------



* fix : jellyfish ๋ถ€๋ถ„

* fix: activity ๋ถ€๋ถ„

* fix: member ๋ถ€๋ถ„

* fix: member ๋ถ€๋ถ„

* fix: spot ๋ถ€๋ถ„

* fix: forecast ๋ถ€๋ถ„

* fix: favorite ๋ถ€๋ถ„

* fix: alert ๋ถ€๋ถ„

* fix: meeting ๋ถ€๋ถ„

---------







* hotfix/fix-alert&favorites-62-HwuanPage

* fix(hotfix/Meeting) : rebase๋กœ ์ธํ•œ ์ฝ”๋“œ ๋ˆ„๋ฝ ์ˆ˜์ • (#65)

* hotfix: ์ฝ”๋“œ ๋ˆ„๋ฝ ํ•ด๊ฒฐ (#67)

* Fix/fix 70 gunwoong (#71)

* hotfix: fix

* hotfix: fix

* hotfix: fix

* fix: application-prod.yml์—์„œ ์ฟ ํ‚ค๋ฅผ ์“ธ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ • (#69)

* fix: application-prod.yml์—์„œ ์ฟ ํ‚ค๋ฅผ ์“ธ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ •

* test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

* fix: activities ์‹œํ๋ฆฌํ‹ฐ ์—”๋“œํฌ์ธํŠธ ํ—ˆ์šฉ. redirecturi ์ˆ˜์ •

* Chore/docker set andvariable-68-hwuanPage

* chore/ReadytoDeployv1.0.0-68-HuwanPage

* chore/ReadytoDeploymentv1.0.0-68-HuwanPage

* remove etc

* prod

* refactor: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค. (#74)

* Feat/meeting test 75 (#77)

* feat : Meetingtest ๋ฅผ ์œ„ํ•œ Util ํŒŒ์ผ์ž…๋‹ˆ๋‹ˆ๋‹ค.

* feat : Meetingtest ๋ฅผ ์œ„ํ•œ Util ํŒŒ์ผ์ž…๋‹ˆ๋‹ˆ๋‹ค.

* feat : MeetingServiceImplTest ๋‹จ์œ„ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

* feat : MeetingControllerTest ํ†ตํ•ฉํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

* feat : Build Lombok์„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ˆ˜์ •์ž…๋‹ˆ๋‹ค.

* feat : Tag ์—”ํ‹ฐํ‹ฐ

Tag List<String> content ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl

* feat : MeetingServiceImpl์—์„œ ์ˆ˜์ •ํ•˜๋Š” ์‘๋‹ต์„ ์ˆ˜์ • , ๋งคํผ๋ฅผ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : Meeting์—์„œ ํ•„์š”ํ•œ url์„ ์—ด์–ด๋’€์Šต๋‹ˆ๋‹ค.

* space prob solve

* stack-trace-DEBUG

* hotfix/data.sql deprecate-HwuanPage (#79)

* hotfix/data.sql deprecate-HwuanPage

* portnum fix

* Xtest

* test X

* workflow fix

* add id

* fix docker-compose-image-root

* release/v1-marineleisure

* fix: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค. (#83)

* fix: cors ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฐํฌ ๋„๋ฉ”์ธ ์ถ”๊ฐ€ (#84)

* fix: blacklist ์—”ํ‹ฐํ‹ฐ์˜ jti์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋‹ค.

* fix: cors ํ”„๋กœํŠธ์—”๋“œ ๋„๋ฉ”์ธ ์ถ”๊ฐ€

* hotfix/method_allowed_patch-HwuanPage (#86)

* Refactor/exception hwuan page (#87)

* refacotr/favorite-Exception-update

* fix kakao_redirect_uri

* Feature/map service refactoring 76 gunwoong (#85)

* feat: mapServiceRefactoring

* refactoring: spot detail refactoring

* refactoring: GeoUtils refactoring

* test: repository test disable for prod

* fix: apply flyway to yml

* fix: disable test

* refactor: khoa refactoring

* fix: bug

* fix: sql

* fix: yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€

* fix: detail field name ์ˆ˜์ •

* feature: ์Šค์ผ€์ค„๋ง ๋น„๋™๊ธฐ ๊ตฌํ˜„ (#91)

* refactor: cacheable (#103)

* Fix/meeting urland role (#100)

* fix : MeetingServiceImpl
getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง€ host ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€

* fix : MeetingRepository

getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง€ host ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€

* fix : MeetingError

MEETING_MEMBER_NOT_FOUND ์—๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ฏธํŒ…์—์„œ ๋งด๋ฒ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค.

* fix : MeetingController

MeetingController ์—์„œ role ์„ ํ™•์ธํ•˜์—ฌ ์ถ”๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

URL ๊ฐœ์„ ์— ์˜ํ•œ ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

@disabled ์ถ”๊ฐ€ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat: ํšŒ์› ํƒˆํ‡ด ์‹œ ์นด์นด์˜ค ์—ฐ๊ฒฐ ๋Š๊ธฐ๋„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•œ๋‹ค. (#98)

* feat: member ์‚ญ์ œ ์‹œ kakao ์—ฐ๊ฒฐ ๋Š๊ธฐ ๋กœ์ง๋„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๊ตฌํ˜„

* test: ๋ณ€๊ฒฝ ์‚ฌํ•ญ test

* feat : Meeting์˜ ์ปค์„œ๋ฐฉ์‹์—์„œ ๋งคํ•‘์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. (#94)

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ณผ์ •์—์„œ pkce๋ฅผ ํ†ตํ•ด ๋ณด์•ˆ ๊ด€์ ์—์„œ ๊ฐœ์„  (#106)

* feat: ๋ณด์•ˆ ์ธ์ฆ ๊ณผ์ •์—์„œ PKCE ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌํ˜„

* test: ๋ณ€๊ฒฝ ์‚ฌํ•ญ test ์ถ”๊ฐ€

* feat: PKCE ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ ์ฝ”๋“œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ

* test: PKCE ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ test

* refactor: PKCE ์ƒ์„ฑ์„ ํด๋ผ์ด์–ธํŠธ ์—๊ฒŒ ๋„˜๊ธด๋‹ค.

* test: pkce test ํ”Œ๋กœ์šฐ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ

* fix: member entity์˜ nickname ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค

* fix: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด SchedulerService.java ์˜ @RequiredArgsConstrucor ์ง€์šด ๋ถ€๋ถ„ ๋ณต๊ตฌ

* fix: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด SchedulerService.java ์˜ @RequiredArgsConstrucor ์ง€์šด ๋ถ€๋ถ„ ๋ณต๊ตฌ

* refactor: open-meteo ์„œ๋น„์Šค ๊ด€๋ จ ๋ฆฌํŒฉํ† ๋ง (#95)

* refactor: RichDomain์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค. (#105)

* Fix: login redirect (#107)

* fix: ๋กœ๊ทธ์ธ ์š”์ฒญ๋•Œ์˜ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri๋ฅผ ํ† ํฐ ๊ตํ™˜์‹œ์—๋„ ์‚ฌ์šฉ

* test: test

* fix: fallback ์ƒํ™ฉ์—์„œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri ์ฐพ๋Š” ๋กœ์ง ์ถ”๊ฐ€

* Refactor/meeting rich domain (#110)

* refactor: RichDomain์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค.

* refactor: ๋ˆ„๋ฝ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ด ์žˆ์–ด ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

* build: caffenine ์ ์šฉ

---------








* fix: fallback ์ƒํ™ฉ์—์„œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ uri ์ฐพ๋Š” ๋กœ์ง ์ถ”๊ฐ€ (#113)

* release (#114) (#115)

* git initialize

* feature/swagger-03-gunwoong (#5)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feat: swagger ์ถ”๊ฐ€

* feature/base domain 04 gunwoong (#6)

* feat: ๊ณตํ†ต ๋„๋ฉ”์ธ ๊ตฌํ˜„

* feat: ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€

* feature/OpenAPI Test/02-HwuanPage

* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage

* feat: entity, repositor ๊ตฌํ˜„

* feat: ์˜ˆ์ƒ dto ๊ตฌํ˜„

* chore: ์˜์กด์„ฑ ์ถ”๊ฐ€

* feat: ๋กœ๊ทธ์ธ ๊ตฌํ˜„ & ์ดํ›„ ํ† ํฐ ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* fix: AuthCotnroller ์ˆ˜์ •

* fix: ํด๋ผ์ด์–ธํŠธ์—์„œ ์นด์นด์˜ค์—์„œ ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„ ์„œ๋ฒ„๋กœ post ํ•˜๊ฒŒ ์ˆ˜์ •

* feat: ํ† ํฐ ๊ฒ€์ฆ

* feat: refresh token ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง ๊ตฌํ˜„

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ & ์žฌ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„

* feat: SecurityFilterChain ์—”๋“œ ํฌ์ธํŠธ ํ—ˆ์šฉ

* feat: refresh ํ† ํฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„

* feat: redis์—์„œ refreshToken ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ

* refactor: controller์— ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ ๋˜์–ด ์žˆ๋˜ ๋กœ์ง๋“ค ๋ถ„๋ฆฌ

* test: member ๊ด€๋ จ ํ…Œ์ŠคํŠธ

* chore: ํ•˜๋“œ์ฝ”๋”ฉํ•œ ์ค‘์š” ๊ฐ’ Intellij IDEA ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •

* refactor: state ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ธ์…˜ ์ถ”๊ฐ€

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* feat: member ์ •๋ณด ์กฐํšŒํ•˜๋Š” ์„œ๋น„์Šค ๋กœ์ง ๊ตฌํ˜„

* format: naver formatter๋กœ ํฌ๋งคํŒ…

* chore: application-dev

* fix: customException ์ฒ˜๋ฆฌ

* Feat/meeting interface (#19)

* feat : MeetingService ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

* feat : ParticipantResponse

* feat : MeetingListResponse ๊ตฌํ˜„

* feat : MeetingDetailResponse๊ตฌํ˜„

* feat : MeetingDetailAndMemberResponse ๊ตฌํ˜„

* feat : ListSpot ๊ตฌํ˜„

* feat : DetailSpot ๊ตฌํ˜„

* feat : CreateMeetingRequest ๊ตฌํ˜„

* feat : Tag ๊ตฌํ˜„

* feat : Long -> long ๋ณ€๊ฒฝ

์„œ๋น„์Šค์™€ Entity๋‚ด์—์„œ null๊ฐ’์ด ์ ˆ๋Œ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฐ’์„ long์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

-> ๋ฌดํ•œํŽ˜์ด์ง€๋กœ๋”ฉํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์—ˆ์Šต๋‹ˆ๋‹ค.

* Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java



---------



* Feature/FavoritesAndAlertInterface-16-HwuanPage

* feature/FavoritesAndAlertInterface-16-HwuanPage

* Update AlertMapper.java

* Update JellyfishRegionDensityRepository.java

* Update AlertController.java

* Update FavoriteController.java

* Update FavoriteRepository.java

* Update AlertController.java

* Update JellyfishSpieces.java

* Update JellyfishRegion.java

* Update JellyfishRegion.java

* feature/CustomExceptionInit-22-HwuanPage

* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change

* Refactor application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • (#25)

* refactor: application.yml ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
* Rename: ์˜คํƒ€ ์ˆ˜์ •

* Feature/spot service interface 29 gunwoong (#30)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* Feature/api scheduler 15 gunwoong (#28)

* feat: api

* feat: api ์Šค์ผ€์ค„๋ง

* feat: spot service inteface

* test: remove legacy test

* feat: apply open meteo

* test: apply api test

* feat: spot service (#34)

* feat: spot service

* feat: spot service ๊ณ ๋„ํ™” ๋ฐ ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* feat: ์กฐํšŒ๋„ ๊ด€๋ จ ์„œ๋น„์Šค ์ถ”๊ฐ€

* hotfix: duplicated controller method

* feature/FavoriteCRUD-33-HwuanPage

* DELETE COMPLETE

* UPDATE COMPLETE

* search COMPLETE

* Before gunwoong

* FavoriteCRUD create

* feat/domain test

* FavoriteSpotServiceTest

* FavoriteSpotServiceTest

* feature/FavoriteCURD-33-HwuanPage

* add some description on service

* Update FavoriteServiceImpl.java

* Feature/spot preview 40 gunwoong (#41)

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* feat: spot preview & ๋ฆฌํŒฉํ† ๋ง

* hotfix: jpa metamodel fix

* fix: error fix

* fix: ์†Œ์…œ ๋กœ๊ทธ์ธ ์žฌ์‹œ๋„ ์‹œ ๋‹‰๋„ค์ž„ UNIQUE ์ œ์•ฝ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ (#42)

* fix: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ํ•˜๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ์‹œ ๋™์ผ ์ •๋ณด๋กœ db์— insert ์ˆ˜์ • ์‚ฌํ•ญ ๋ฆฌํŒฉํ† ๋ง

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* hofix: bug fix

* Feature/Alert-22-HwuanPage

* Create Pdf Parser

* Web crawler run perpectly,but pdfparser do not work well

* PDF parse to stack DB complete with OPENAI

* CallAlert Complete

* JellyFish PDF parsing work well

* feature/ControllerTest Complete

* feature/JellyfishAlert-26-HwuanPage

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (#49)

* feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

* refactor: ๋ฆฌํŒฉํ† ๋ง

* feat: ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ stateless ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•œ๋‹ค (#51)

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: ๊ธฐ์กด state ์‚ฌ์šฉ ๋ฐฉ์‹ -> stateless ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•„์š” ์—†๋Š” ์—”๋“œ ํฌ์ธํŠธ ์‚ญ์ œ

* test: ๋ณ€๊ฒฝ์‚ฌํ•ญ test ์ˆ˜์ •

* feat: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

* test: ์นด์นด์˜ค ์ธก์—์„œ ์ธ์ฆ ์‹คํŒจ์‹œ์— ๋ฐ˜ํ™˜ ํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

* fix: ์ฃผ์„ ์ œ๊ฑฐ

* fix: exception ๋ณ€๊ฒฝ

* Feat/meeting service (#46)

* WIP: Rebase๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* feat : Meeting.java

-> Meeting ์—”ํ„ฐํ‹ฐ @builder ๋ฅผ ์ƒ์œ„ ์–ด๋…ธํ…Œ์ด์…˜์— ์ผ๋‹จ ์ถ”๊ฐ€์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* Delete MeetingServiceImplReview.md

* Delete MeetingServiceUserFlow.md

* feat : ํŒจํ‚ค์ง€๋ช… ๋ณ€๊ฒฝ ์ด์Šˆ

-> ํŒจํ‚ค์ง€ ๋ช…์„ ์ปจ๋ฒค์…˜์— ๋”ฐ๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingController.java

long participantCount = participantRepository.countMeetingIdMember
->
long participantCount = participantRepository.countMeetingId๋กœ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingError.java

MeetingError.java ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingMapper

MeetingServiceImpl์—์„œ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋˜ Mapper๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

* feat : MeetingService.java

ํŒจํ‚ค์ง€ ๋ช… ์ˆ˜์ •์œผ๋กœ ์ธํ•ด์„œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat : MeetingServiceImpl.java

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋ช…ํ™•ํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
validate ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
joinMeeting ์ค‘๋ณต ์ฐธ์—ฌ ์ œํ•œ ๋กœ์ง์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  * `getAllMeetings(Long cursorId, int size)`:
       * ๋ชฉ์ : ๋ชจ๋“  ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. cursorId๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ๊ฐ™์€ ์ปค์„œ ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
       * ํŠน์ง•: @transactional(readOnly = true)๋ฅผ ํ†ตํ•ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
   * `getMeetingDetails(Long meetingId)`:
       * ๋ชฉ์ : ํŠน์ • ๋ชจ์ž„์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ์žฅ์†Œ, ํƒœ๊ทธ ๋“ฑ ์—ฐ๊ด€๋œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ํ˜„์žฌ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ํ–ฅํ›„ Fetch Join์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์˜ ์ƒํƒœ๋ณ„(์˜ˆ: ๋ชจ์ง‘ ์ค‘, ์™„๋ฃŒ) ๋ชจ์ž„ ๋ชฉ๋ก์„ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
   * `getMeetingDetailAndMember(Long memberId, Long meetingId)`:
       * ๋ชฉ์ : ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ ๋ชจ์ž„ ์ƒ์„ธ ์ •๋ณด์™€ ์ฐธ์—ฌ์ž ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์—ฌ์ž๋“ค์˜ ๋‹‰๋„ค์ž„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
   * `countMeetings(Long memberId)`:
       * ๋ชฉ์ : ํŠน์ • ํšŒ์›์ด ์ฐธ์—ฌํ•œ ๋ชจ์ž„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
   * `joinMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ํŠน์ • ๋ชจ์ž„์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ๋ชจ์ž„ ์ƒํƒœ ๊ฒ€์ฆ(verifyRecruiting), ์ค‘๋ณต ์ฐธ์—ฌ ๊ฒ€์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ž„ ์ •์› ์ดˆ๊ณผ ๊ฒ€์ฆ(verifyMeetingCount) ๋กœ์ง์ด ๊ฐ•ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: ๋™์‹œ์„ฑ ๋ฌธ์ œ(Race Condition) ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๋น„๊ด€์  ๋ฝ(Pessimistic Lock) ์ ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
   * `leaveMeeting(Long meetingId, Long memberId)`:
       * ๋ชฉ์ : ํšŒ์›์ด ๋ชจ์ž„์—์„œ ํƒˆํ‡ดํ•ฉ๋‹ˆ๋‹ค.
       * ์ฃผ์š” ๊ฐœ์„ : ํ˜ธ์ŠคํŠธ ํƒˆํ‡ด ๋ฐฉ์ง€(verifyNotHost), ๋ชจ์ž„ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํƒˆํ‡ด ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ(verifyLeave) ๋กœ์ง์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
       * ๊ฐœ์„  ์˜ˆ์ •: MEETING_NOT_FOUND ๋Œ€์‹  CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ™์€ ๋” ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ โ€ฆ

Co-authored-by: HwuanPage <[email protected]>
Co-authored-by: JaeoneHeo <[email protected]>
Co-authored-by: LEESUNBIN <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: MyungJin <[email protected]>
Co-authored-by: iseonbin <[email protected]>
Co-authored-by: MyungJin <[email protected]>
@gunwoong1630 gunwoong1630 merged commit 298a3db into main Jul 30, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants